2003年07月13日
川俣晶の縁側ソフトウェアりすと亭開発日誌 total 2128 count

APIレイヤーの追加

Written By: 川俣 晶連絡先

 今日は、日曜日だというのに、りすと亭のソースを直していました。

 今日の作業を一言で言えば、明確な形でのAPIレイヤーの追加ということになります。これまでのりすと亭は、内部的にいくつかのアセンブリに分割されているとはいえ、全体として1つの塊として動作するアプリケーションソフトという形になっていました。正確に言えば、一部のアセンブリは本体とサービスマネージャでシェアされて使われたり、完全に1つの塊というわけではありませんが。まあ、ともかく、幅広く使われることが想定されていない設計でした。(明確に想定されていないことを実現するのはYAGNIの原則からすれば不適切ですし)

 しかし、Webサービスだけでなく、プラグインの機能を付けていくことを想定すると、これでは不十分です。プラグインがりすと亭内部の何かの情報を取得しようとしたとき、あるいは何かの機能を呼び出そうとしたときに、それを実現するインターフェースが必要となります。

 ここで重要なことは、インターフェースはただ付ければ良いというものではないということです。りすと亭のプログラム内部は改良によってどんどん変わっていきます。もし、プログラム内部の一部へのアクセスを許すとすると、その部分を書き換えると、プラグインが動作しなくなります。かといって、プログラムの書き換えをしないと決めると、進化の止まった保守性の悪いプログラムになって、サポートの手間も増えるし、ユーザーにもあまりメリットがありません。

 今日やったことは、このようなジレンマを解消するために、明確なレイヤー分けを導入するということです。ListTeiAPI.dllというアセンブリが、レイヤー境界を担います。このアセンブリは、プログラムの内部動作に依存しないinterface (ここでいうinterfaceは純粋にC#の言語仕様でいうところのinterface)をいくつか定義しています。りすと亭本体と、ListTeiAPI.dllは、このinterfaceを通じて関係を持ちます。これにより、ListTeiAPI.dllはりすと亭本体のモジュールに対する参照関係を持ちません。その結果、ListTeiAPI.dllだけを切り離して、新たに作成される新規プログラムから参照して利用することができます。つまり、この新規プログラムはListTeiAPI.dllが提供するクラスにのみアクセスすることができ、りすと亭本体のいかなる変更も、新規プログラムに影響を与えることが無くなります。

 とはいえ、現時点でAPI経由で使える機能は、とあるお客様から要求された最低限のものです。これらの機能を使って華々しい何かが実現するのは、おそらくは、次のメジャーバージョンアップの頃ということになるでしょう。